package org.budo.graph.druid.spring.aop.interceptor;

import com.alibaba.druid.filter.stat.StatFilterContextListenerAdapter;
import com.alibaba.druid.support.spring.stat.SpringMethodStat;

/**
 * @author li
 * @version 1 (2015年11月6日 下午5:31:23)
 * @since Java7
 */
public class BudoGraphSpringMethodContextListener extends StatFilterContextListenerAdapter {
    public void addUpdateCount(int updateCount) {
        SpringMethodStat springMethodStat = SpringMethodStat.current();
        if (springMethodStat != null) {
            springMethodStat.addJdbcUpdateCount(updateCount);
        }
    }

    public void addFetchRowCount(int fetchRowCount) {
        SpringMethodStat springMethodStat = SpringMethodStat.current();
        if (springMethodStat != null) {
            springMethodStat.addJdbcFetchRowCount(fetchRowCount);
        }
    }

    public void executeBefore(String sql, boolean inTransaction) {
        SpringMethodStat springMethodStat = SpringMethodStat.current();
        if (springMethodStat != null) {
            springMethodStat.incrementJdbcExecuteCount();
        }
    }

    public void executeAfter(String sql, long nanos, Throwable error) {
        SpringMethodStat springMethodStat = SpringMethodStat.current();
        if (springMethodStat != null) {
            springMethodStat.addJdbcExecuteTimeNano(nanos);
            if (error != null) {
                springMethodStat.incrementJdbcExecuteErrorCount();
            }
        }
    }

    public void commit() {
        SpringMethodStat springMethodStat = SpringMethodStat.current();
        if (springMethodStat != null) {
            springMethodStat.incrementJdbcCommitCount();
        }
    }

    public void rollback() {
        SpringMethodStat springMethodStat = SpringMethodStat.current();
        if (springMethodStat != null) {
            springMethodStat.incrementJdbcRollbackCount();
        }
    }

    public void pool_connect() {
        SpringMethodStat springMethodStat = SpringMethodStat.current();
        if (springMethodStat != null) {
            springMethodStat.incrementJdbcPoolConnectionOpenCount();
        }
    }

    public void pool_close(long nanos) {
        SpringMethodStat springMethodStat = SpringMethodStat.current();
        if (springMethodStat != null) {
            springMethodStat.incrementJdbcPoolConnectionCloseCount();
        }
    }

    public void resultSet_open() {
        SpringMethodStat springMethodStat = SpringMethodStat.current();
        if (springMethodStat != null) {
            springMethodStat.incrementJdbcResultSetOpenCount();
        }
    }

    public void resultSet_close(long nanos) {
        SpringMethodStat springMethodStat = SpringMethodStat.current();
        if (springMethodStat != null) {
            springMethodStat.incrementJdbcResultSetCloseCount();
        }
    }
}